package mx.itesm.goyostacoadventure;

import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.opengl.texture.region.TiledTextureRegion;

import java.util.ArrayList;

/**
 * Created by OscarG on 21/04/15.
 */
public class Perro1 {
    double factorVelocidad = 0;
    private AnimatedSprite perro1Der;
    private AnimatedSprite perro1Izq;
    private AnimatedSprite perro1Up;
    private AnimatedSprite perro1Down;
    private AnimatedSprite perro1;
    private AnimatedSprite donGoyo;

    public Perro1(AnimatedSprite donGoyo, AdministradorRecursos admRecursos) {
        //float xa = (float) (Math.random() * ControlJuego.ANCHO_CAMARA);
        //float ya = (float) (Math.random() * ControlJuego.ALTO_CAMARA);
        float xa = (float)(Math.random() * (1900 - (-1100) + 1) + (-1100)); //(max - min + 1) + min
        float ya = (float)(Math.random() * (1100 - (-600) + 1) + (-600)); //(max - min + 1) + min

        this.donGoyo = donGoyo;

        TiledTextureRegion regionPerro1Der = admRecursos.regionPerro1Der;
        perro1Der = new AnimatedSprite(xa, ya,
                regionPerro1Der, admRecursos.vbom);
        perro1Der.animate(80);

        TiledTextureRegion regionPerro1Izq = admRecursos.regionPerro1Izq;
        perro1Izq = new AnimatedSprite(xa, ya,
                regionPerro1Izq, admRecursos.vbom);
        perro1Izq.animate(80);

        TiledTextureRegion regionPerro1Down = admRecursos.regionPerro1Down;
        perro1Down = new AnimatedSprite(xa, ya,
                regionPerro1Down, admRecursos.vbom);
        perro1Down.animate(80);

        TiledTextureRegion regionPerro1Up = admRecursos.regionPerro1Up;
        perro1Up = new AnimatedSprite(xa, ya,
                regionPerro1Up, admRecursos.vbom);
        perro1Up.animate(80);


        perro1 = perro1Der;

        factorVelocidad = ((Math.random() * 1) + 3);
    }



    public void perseguirDonGoyo3(EscenaJuego escenaJuego, ArrayList<Perro1> lista, AnimatedSprite donG) {
        AnimatedSprite donGoyo = donG;
        float dx = donGoyo.getX() - perro1.getX();
        float dy = donGoyo.getY() - perro1.getY();
        float length = (float) Math.sqrt(dx * dx + dy * dy);
        float accelerationX = dx / length;
        float accelerationY = dy / length;
        perro1.setX((float) ((accelerationX * factorVelocidad) + perro1.getX()));
        perro1.setY((float) ((accelerationY * factorVelocidad) + perro1.getY()));

        if (dx > 0 && dy > 0 && dy < dx && perro1 != perro1Der){
            perro1Der.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Der;
            escenaJuego.attachChild(perro1);
        }

        if (dx > 0 && dy < 0 && dy > (-dx) && perro1 != perro1Der){
            perro1Der.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Der;
            escenaJuego.attachChild(perro1);
        }

        if (dx < 0 && dy > 0 && dy > (-dx) && perro1 != perro1Up){
            perro1Up.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Up;
            escenaJuego.attachChild(perro1);
        }

        if (dx > 0 && dy > 0 && dy > dx && perro1 != perro1Up){
            perro1Up.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Up;
            escenaJuego.attachChild(perro1);
        }

        if (dy > 0 && dx < 0 && dy < (-dx) && perro1 != perro1Izq){
            perro1Izq.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Izq;
            escenaJuego.attachChild(perro1);
        }

        if (dy < 0 && dx < 0 && dy > dx && perro1 != perro1Izq){
            perro1Izq.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Izq;
            escenaJuego.attachChild(perro1);
        }

        if (dy < 0 && dx < 0 && dy < dx && perro1 != perro1Down){
            perro1Down.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Down;
            escenaJuego.attachChild(perro1);
        }

        if (dx > 0 && dy < 0 && dy < (-dx) && perro1 != perro1Down){
            perro1Down.setPosition(perro1);
            perro1.detachSelf();
            perro1 = perro1Down;
            escenaJuego.attachChild(perro1);
        }

        /*if (perro3.collidesWith(donGoyo) ) {
            perro3.detachSelf();
            lista.remove(this);

        }*/
        /*if (perro1.getX() >= donGoyo.getX()-donGoyo.getWidth()/2 && perro1.getX() <= donGoyo.getX()+donGoyo.getWidth()/2){
            if (perro1.getY() >= donGoyo.getY()-donGoyo.getHeight()/2 && perro1.getY() <= donGoyo.getY()+donGoyo.getHeight()/2) {
                perro1.detachSelf();
                return true;

            }

        }
        */
    }

    public boolean atrapaDonGoyo(ArrayList<Perro1> lista, AnimatedSprite donG){
        AnimatedSprite donGoyo = donG;
        if (perro1.getX() >= donGoyo.getX()-donGoyo.getWidth()/2 && perro1.getX() <= donGoyo.getX()+donGoyo.getWidth()/2){
            if (perro1.getY() >= donGoyo.getY()-donGoyo.getHeight()/2 && perro1.getY() <= donGoyo.getY()+donGoyo.getHeight()/2) {
                MoveModifier modP3 = new MoveModifier(3, perro1.getX(), perro1.getY(), perro1.getX() - 500, perro1.getY() + 500) {
                    @Override
                    protected void onModifierFinished(IEntity pItem) {
                        super.onModifierFinished(pItem);

                    }
                };
                perro1.registerEntityModifier(modP3);
                //perro1.detachSelf();
                //perro1.setX(-perro1.getX() - perro1.getX());
                //perro3.setY(perro3.getY()*-1);
                return true;

            }

        }
        return false;
    }

    public AnimatedSprite getPerro1() {
        return perro1;
    }
}
